package Controller.BDD;

import java.util.ArrayList;

import Model.Droit;
import Model.Groupe;
import Model.Utilisateur;

/*
 * 
 * A FAIRE : GERER LA MISE A JOUR
 * 
 */

public class GestionUserBDD {

	public GestionUserBDD(){
		
	}
	
	
	public static ArrayList<Utilisateur> recupererListeUsers(){
		GestionRequeteUser gestRequete = new GestionRequeteUser();
		ArrayList<Utilisateur> listeUsers = new ArrayList<Utilisateur>();
		ArrayList<Droit> listeDroits = new ArrayList<Droit>();
		ArrayList<Groupe> listeGroupes = new ArrayList<Groupe>();
		listeUsers = gestRequete.recupererListeDonneesUsers("SELECT * FROM USERS;");
		
		if(listeUsers != null){
			for (Utilisateur user : listeUsers) {
				int id = user.getID();
				listeDroits = gestRequete.recupererListeDroitUtilisateur("SELECT id_droit from \"userPossede\" where id_user="+id+";");
				listeGroupes = gestRequete.recupererListeGroupeUtilisateur("Select id_groupe from \"appartenanceGroupe\" where id_user="+id+";");
				user.setDroits(listeDroits);
				user.setGroupes(listeGroupes);
				//System.out.println(user.toString());
			}
		}
		return listeUsers;
		
	}
	
	public static Utilisateur recupererUsersParID(int id){
		GestionRequeteUser gestRequete = new GestionRequeteUser();
		ArrayList<Droit> listeDroits = new ArrayList<Droit>();
		ArrayList<Groupe> listeGroupes = new ArrayList<Groupe>();
		
		Utilisateur user = gestRequete.recupererUserParID("SELECT * from users where id="+id+";");
		listeDroits = gestRequete.recupererListeDroitUtilisateur("SELECT id_droit from \"userPossede\" where id_user="+id+";");
		listeGroupes = gestRequete.recupererListeGroupeUtilisateur("Select id_groupe from \"appartenanceGroupe\" where id_user="+id+";");
		
		user.setDroits(listeDroits);
		user.setGroupes(listeGroupes);
		
		return user;
	}
	
	public void insererUsers(Utilisateur user){
		GestionRequeteUser gestRequete = new GestionRequeteUser();
		gestRequete.executeStatement("INSERT INTO users(libelle) values("+user.getNom()+");");
		for (Droit droit : user.getDroits()) {
			gestRequete.executeStatement("INSERT INTO \"userPossede\"(id_user,id_droit) values("+user.getID()+","+droit.getID()+");");
		}
		for (Groupe groupe : user.getGroupes()) {
			gestRequete.executeStatement("INSERT INTO \"appartenanceGroupe\"(id_user,id_groupe) values("+user.getID()+","+groupe.getID()+");");
		}
	}

	public void supprimerUserParID(Utilisateur user){
		GestionRequeteUser gestRequete = new GestionRequeteUser();
		gestRequete.executeStatement("DELETE FROM users WHERE id = "+user.getID()+";");
		gestRequete.executeStatement("DELETE FROM  \"userPossede\" WHERE id_user = "+user.getID()+";");
		gestRequete.executeStatement("DELETE FROM \"appartenanceGroupe\" WHERE id_user = "+user.getID()+";");
	}
	
	public void modifierUtilisateur(Utilisateur user){
		GestionRequeteUser gestRequete = new GestionRequeteUser();
		gestRequete.executeStatement("UPDATE users set libelle='"+user.getNom()+"' where id="+user.getID()+";");
		gestRequete.executeStatement("Delete from \"userPossede\" where id_user="+user.getID()+";");
		for (Droit droit : user.getDroits()){
			gestRequete.executeStatement("insert into \"userPossede\"(id_user,id_droit) values ("+user.getID()+","+droit.getID()+");");
		}
		gestRequete.executeStatement("Delete from \"appartenanceGroupe\" where id_user="+user.getID()+";");
		for (Groupe groupe : user.getGroupes()){
			gestRequete.executeStatement("insert into \"appartenanceGroupe\"(id_user,id_groupe) values ("+user.getID()+","+groupe.getID()+");");
		}
	}
	
	public static void main(String[] args) {
		recupererListeUsers();
	}
}
